package com.kotiln.lgc.androidkotlindsl

import android.annotation.SuppressLint
import android.app.Application
import android.content.ContentValues.TAG
import android.util.Log
import cat.ereza.customactivityoncrash.CustomActivityOnCrash
import cat.ereza.customactivityoncrash.config.CaocConfig
import com.kotiln.lgc.androidkotlindsl.activity.MainActivity
import com.kotiln.lgc.lib_base.base.BaseApp
import com.kotiln.lgc.lib_base.helper.ARouterHelper

/**
 *@fileName AppApplication
 *@date2021/4/29  18:23
 *@author AppApplication$
 *@describe TODO
 *@desc
 */
class  AppApplication:BaseApp() {

    override fun onCreate() {
        super.onCreate()
        ARouterHelper.initHelper(this)
        //初始化Crash配置
        initCrashConfig(this)
    }

    @SuppressLint("RestrictedApi")
    private fun initCrashConfig(context: Application) {
        //整个配置属性，可以设置一个或多个，也可以一个都不设置
        CaocConfig.Builder.create() //程序在后台时，发生崩溃的三种处理方式
            //BackgroundMode.BACKGROUND_MODE_SHOW_CUSTOM: //当应用程序处于后台时崩溃，也会启动错误页面，
            //BackgroundMode.BACKGROUND_MODE_CRASH:      //当应用程序处于后台崩溃时显示默认系统错误（一个系统提示的错误对话框），
            //BackgroundMode.BACKGROUND_MODE_SILENT:     //当应用程序处于后台时崩溃，默默地关闭程序！
            .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT)
            .enabled(true) //false表示对崩溃的拦截阻止。用它来禁用customactivityoncrash框架
            .showErrorDetails(false) //这将隐藏错误活动中的“错误详细信息”按钮，从而隐藏堆栈跟踪,—》针对框架自带程序崩溃后显示的页面有用(DefaultErrorActivity)。。
            .showRestartButton(true) //是否可以重启页面,针对框架自带程序崩溃后显示的页面有用(DefaultErrorActivity)。
            .trackActivities(true) //错误页面中显示错误详细信息；针对框架自带程序崩溃后显示的页面有用(DefaultErrorActivity)。
            .minTimeBetweenCrashesMs(2000) //定义应用程序崩溃之间的最短时间，以确定我们不在崩溃循环中。比如：在规定的时间内再次崩溃，框架将不处理，让系统处理！
            .errorDrawable(R.mipmap.ic_launcher) //崩溃页面显示的图标
            .restartActivity(MainActivity::class.java) //重新启动后的页面
            .errorActivity(MainActivity::class.java) //程序崩溃后显示的页面
            .eventListener(CustomEventListener()) //设置监听
            .apply()
        //如果没有任何配置，程序崩溃显示的是默认的设置
        CustomActivityOnCrash.install(context)
    }

    /**
     * 监听程序崩溃/重启
     */
    private class CustomEventListener : CustomActivityOnCrash.EventListener {
        //程序崩溃回调
        override fun onLaunchErrorActivity() {
            Log.d(TAG, "程序崩溃回调")
        }

        //重启程序时回调
        override fun onRestartAppFromErrorActivity() {
            Log.d(TAG, "重启程序时回调")
        }

        //在崩溃提示页面关闭程序时回调
        override fun onCloseAppFromErrorActivity() {
//            Log.d(AppApplication.TAG, "在崩溃提示页面关闭程序时回调")
        }
    }
}